#include "MC33879.h"

#include "std.h"


t_mc33879 mc33879_dev[2];


void mc33879_init(p_mc33879 dev,uint8_t chan,SPI_HandleTypeDef *spix,GPIO_TypeDef *gpio_cs,uint16_t gpio_pin_cs,GPIO_PinState cs_valid,GPIO_TypeDef *gpio_en,uint16_t gpio_pin_en,GPIO_PinState en_valid)
{
    dev->chan = chan;

    dev->spix = spix;

    dev->gpio_cs = gpio_cs;
    dev->gpio_pin_cs = gpio_pin_cs;
    dev->cs_valid = cs_valid;

    dev->gpio_en = gpio_en;
    dev->gpio_pin_en = gpio_pin_en;
    dev->en_valid = en_valid;
	
    HAL_GPIO_WritePin(dev->gpio_en,dev->gpio_pin_en,dev->en_valid);
}


int mc33879_rw(p_mc33879 dev,uint16_t txdata)
{
    int tmp;
    uint8_t tx_buf[2], rx_buf[2];
//    HAL_GPIO_WritePin(dev->gpio_en,dev->gpio_pin_en,dev->en_valid);
    HAL_GPIO_WritePin(dev->gpio_cs,dev->gpio_pin_cs,dev->cs_valid);

    // tx_buf[0] = 0x11;
    // tx_buf[1] = 0x22;
    // tx_buf[2] = 0x33;
    // tx_buf[3] = 0x44;
    tx_buf[0] = txdata>>8;
    tx_buf[1] = txdata&0xff;
    tmp = HAL_SPI_TransmitReceive(dev->spix, tx_buf,rx_buf, 2, 1000);
    if (tmp == HAL_OK)
    {
        dev->out.data = txdata;
        dev->fault.data = (rx_buf[0]<<8) | rx_buf[1];
    }
    
    HAL_GPIO_WritePin(dev->gpio_cs,dev->gpio_pin_cs,(GPIO_PinState)(!(dev->cs_valid)));
//    HAL_GPIO_WritePin(dev->gpio_en,dev->gpio_pin_en,(GPIO_PinState)(!(dev->en_valid)));

    return tmp;
}







